/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ficheros;

import classes.Imagen;
import classes.Obstaculo;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

public class UtilidadesFicheros {

    public static final String TERMINACIONTEXTO = ".txt";

    public static List<Imagen> cargarDatos(File directorio) {
        List<Imagen> resultado = null;
        File[] listaFicheros = directorio.listFiles(new ImageFileFiltrer());
        if (listaFicheros != null) {
            resultado = new ArrayList<>();
            Imagen auxImagen = null;
            File ficheroTexto = null;
            String rutaFicheroTexto = null;
            for (File aux : listaFicheros) {
                //System.out.println(aux.getName());
                auxImagen = new Imagen();
                auxImagen.setPath(aux.getAbsolutePath());
                // cogemos el fichero de texto a partir de la ruta de la imagen quitandole la terminacion .tif
                rutaFicheroTexto = aux.getParent() + File.separator + aux.getName().substring(0, aux.getName().length() - 4) + TERMINACIONTEXTO;
                ficheroTexto = new File(rutaFicheroTexto);
                auxImagen.setListaObstaculos(cargarObstaculos(ficheroTexto));
                //System.out.println(" "+auxImagen.getListaObstaculos().size()+" CORRECTO");
                resultado.add(auxImagen);
            }
        }
        return resultado;
    }

    private static List<Obstaculo> cargarObstaculos(File ficheroTexto) {
        List<Obstaculo> resultado = new ArrayList<>();
        Obstaculo auxObstaculo = null;
        FileReader fr;
        try {
            fr = new FileReader(ficheroTexto);
            BufferedReader bf = new BufferedReader(fr);
            String sCadena;
            String[] listaCampos;
            while ((sCadena = bf.readLine()) != null) {
                //System.out.println(sCadena);
                auxObstaculo = new Obstaculo();
                // el operador | en expresiones regulares es el operador OR por lo que hay que poner el caracter de escape \\
                listaCampos = sCadena.split("\\|");
                if (listaCampos.length == 6) {
                    auxObstaculo.setIdObstaculo(Integer.parseInt(listaCampos[0]));
                    auxObstaculo.setPos_U(Double.valueOf(listaCampos[1]));
                    auxObstaculo.setPos_V(Double.valueOf(listaCampos[2]));
                    auxObstaculo.setAncho(Double.valueOf(listaCampos[3]));
                    auxObstaculo.setAlto(Double.valueOf(listaCampos[4]));
                    auxObstaculo.setTipoObstaculo(Integer.valueOf(listaCampos[5]));
                } else {
                    throw new Exception("Error al procesar el fichero ruta "+listaCampos.length+" " + ficheroTexto.getAbsolutePath());

                }
                resultado.add(auxObstaculo);

            }
        } catch (IOException ex) {
            Logger.getLogger(UtilidadesFicheros.class.getName()).log(Level.SEVERE, null, ex);
            resultado = null;
        } catch (Exception ex) {
            Logger.getLogger(UtilidadesFicheros.class.getName()).log(Level.SEVERE, null, ex);
            resultado = null;
        }

        return resultado;
    }
}
